Transactional Emails (Order Confirmation, Password Reset)

Java Technologies - জাভা মেইল এপিআই (JavaMail API) Real-life Use Cases এবং Practical উদাহরণ |
109
109

Transactional Emails হল ইমেইলগুলির একটি ধরনের যা সরাসরি কোনো ব্যবহারকারীর (customer) সাথে সম্পর্কিত একটি ইভেন্টের পর পাঠানো হয়। এই ধরনের ইমেইল সাধারণত অর্ডার কনফার্মেশন, পাসওয়ার্ড রিসেট, ইনভয়েস, অ্যাকাউন্ট অ্যাক্টিভেশন ইত্যাদির জন্য ব্যবহৃত হয়। এই ইমেইলগুলি সাধারণত একমাত্র তথ্যবহুল, যেখানে গ্রাহক বা ব্যবহারকারীকে প্রাসঙ্গিক এবং সময়োচিত তথ্য প্রদান করা হয়।

JavaMail API ব্যবহার করে আপনি Transactional Emails যেমন Order Confirmation বা Password Reset সহজেই পাঠাতে পারেন। এই ধরনের ইমেইল পাঠানোর জন্য, আপনি সাধারণত HTML ইমেইল ব্যবহার করবেন এবং JavaMail API এর মাধ্যমে সেই ইমেইল পাঠাতে পারবেন।

Transactional Emails - Order Confirmation Example

এখানে আমরা Order Confirmation Email পাঠানোর একটি উদাহরণ দেখব। এই ইমেইলটি গ্রাহককে একটি অর্ডারের কনফার্মেশন পাঠাবে।

JavaMail API Setup

প্রথমে, আপনাকে JavaMail API সেটআপ করতে হবে, যা Maven বা JAR ফাইল এর মাধ্যমে করা যেতে পারে।

pom.xml (Maven Dependency):

<dependencies>
    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.6.2</version>  <!-- সর্বশেষ সংস্করণ চেক করুন -->
    </dependency>
</dependencies>

Order Confirmation Email উদাহরণ:

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.sql.*;

public class SendTransactionalEmail {

    public static void main(String[] args) {

        // Step 1: ডেটাবেস থেকে গ্রাহকের তথ্য ফেচ করা
        String dbUrl = "jdbc:mysql://localhost:3306/mydatabase";
        String dbUser = "root";
        String dbPassword = "password";
        String orderId = "12345";  // উদাহরণস্বরূপ, অর্ডার আইডি

        String customerName = "";
        String customerEmail = "";
        String orderDate = "";
        double totalAmount = 0.0;

        try {
            // Step 2: ডেটাবেস সংযোগ স্থাপন করা
            Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
            String query = "SELECT customer_name, email, order_id, order_date, total_amount FROM orders WHERE order_id = ?";
            PreparedStatement stmt = conn.prepareStatement(query);
            stmt.setString(1, orderId);
            ResultSet rs = stmt.executeQuery();

            // Step 3: অর্ডার ডেটা রিট্রিভ করা
            if (rs.next()) {
                customerName = rs.getString("customer_name");
                customerEmail = rs.getString("email");
                orderDate = rs.getString("order_date");
                totalAmount = rs.getDouble("total_amount");
            }
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        // SMTP Server Properties
        String host = "smtp.gmail.com";
        String username = "your-email@gmail.com";
        String password = "your-email-password";

        Properties properties = new Properties();
        properties.put("mail.smtp.host", host);
        properties.put("mail.smtp.port", "587");
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");

        // Create Session
        Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });

        try {
            // Create MimeMessage
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(username));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(customerEmail));
            message.setSubject("Order Confirmation - Order #" + orderId);

            // HTML Content for Transactional Email
            String htmlContent = "<html><body>"
                    + "<h1>Order Confirmation</h1>"
                    + "<p>Dear " + customerName + ",</p>"
                    + "<p>Thank you for your order! Below are the details of your recent purchase:</p>"
                    + "<table>"
                    + "<tr><td><strong>Order ID:</strong></td><td>" + orderId + "</td></tr>"
                    + "<tr><td><strong>Order Date:</strong></td><td>" + orderDate + "</td></tr>"
                    + "<tr><td><strong>Total Amount:</strong></td><td>$" + totalAmount + "</td></tr>"
                    + "</table>"
                    + "<p>We hope to serve you again soon!</p>"
                    + "</body></html>";

            // Set the email content
            MimeBodyPart textPart = new MimeBodyPart();
            textPart.setContent(htmlContent, "text/html");

            // Create a MimeMultipart object
            MimeMultipart multipart = new MimeMultipart();
            multipart.addBodyPart(textPart);

            // Set the content of the message to the multipart object
            message.setContent(multipart);

            // Send the email
            Transport.send(message);
            System.out.println("Transactional email sent successfully to: " + customerEmail);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

এখানে কী হচ্ছে?

  1. ডেটাবেস সংযোগ স্থাপন:
    • JDBC ব্যবহার করে MySQL ডাটাবেসের সাথে সংযোগ স্থাপন করা হয়েছে। এখানে PreparedStatement ব্যবহার করে অর্ডার আইডির মাধ্যমে গ্রাহকের নাম, ইমেইল, অর্ডার তারিখ এবং মোট মূল্য রিট্রিভ করা হচ্ছে।
  2. JavaMail API সেটআপ:
    • SMTP সার্ভারের জন্য প্রপার্টি সেট করা হয়েছে (Gmail সার্ভার ব্যবহার করা হচ্ছে)।
    • Session তৈরি করা হচ্ছে যা SMTP সার্ভারের সাথে যোগাযোগ করতে সাহায্য করবে।
  3. HTML কনটেন্ট:
    • HTML কনটেন্ট ব্যবহার করে অর্ডার কনফার্মেশন ইমেইল তৈরি করা হয়েছে। এখানে টেবিলের মাধ্যমে গ্রাহকের অর্ডারের বিস্তারিত তথ্য প্রদর্শন করা হচ্ছে।
  4. MimeMultipart:
    • MimeMultipart ব্যবহার করে ইমেইলের কনটেন্ট হিসেবে HTML কনটেন্ট এবং অন্যান্য উপাদানগুলো একত্রিত করা হচ্ছে।
  5. Transport.send():
    • Transport.send() মেথড ব্যবহার করে ইমেইল প্রেরণ করা হচ্ছে।

Transactional Emails - Password Reset Example

এখন আমরা Password Reset এর উদাহরণ দেখব যেখানে ব্যবহারকারীকে পাসওয়ার্ড রিসেট লিঙ্ক পাঠানো হবে।

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class SendPasswordResetEmail {

    public static void main(String[] args) {

        // SMTP Server Properties
        String host = "smtp.gmail.com";
        String username = "your-email@gmail.com";
        String password = "your-email-password";

        // Session Setup
        Properties properties = new Properties();
        properties.put("mail.smtp.host", host);
        properties.put("mail.smtp.port", "587");
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");

        Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });

        try {
            // Create MimeMessage
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(username));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient-email@example.com"));
            message.setSubject("Password Reset Request");

            // Password Reset Link in HTML format
            String htmlContent = "<html><body>"
                    + "<h1>Password Reset</h1>"
                    + "<p>Click the link below to reset your password:</p>"
                    + "<a href='https://yourwebsite.com/reset-password?token=12345'>Reset Password</a>"
                    + "</body></html>";

            // Set the email content
            MimeBodyPart textPart = new MimeBodyPart();
            textPart.setContent(htmlContent, "text/html");

            // Create a MimeMultipart object
            MimeMultipart multipart = new MimeMultipart();
            multipart.addBodyPart(textPart);

            // Set the content of the message to the multipart object
            message.setContent(multipart);

            // Send the email
            Transport.send(message);
            System.out.println("Password reset email sent successfully!");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

এখানে কী হচ্ছে?

  1. Password Reset Link:
    • Password Reset ইমেইলে একটি reset password link প্রদান করা হচ্ছে। এই লিঙ্কটি সাধারণত একটি নিরাপদ টোকেন দিয়ে তৈরী হয় যা ব্যবহারকারীকে সঠিক পাসওয়ার্ড পরিবর্তন পৃষ্ঠায় নিয়ে যায়।
  2. HTML Content:
    • পাসওয়ার্ড রিসেট ইমেইলটি HTML ফরম্যাটে তৈরি করা হয়েছে, যাতে Hyperlink সহ ক্লিকযোগ্য রিসেট লিঙ্ক থাকে।

Transactional Emails পাঠানোর জন্য JavaMail API অত্যন্ত কার্যকরী একটি টুল। আপনি গ্রাহকদের Order Confirmation বা Password Reset ইমেইল পাঠানোর সময় HTML কনটেন্ট ব্যবহার করে তাদের আরও বিস্তারিত তথ্য প্রদান করতে পারেন। JavaMail API এর মাধ্যমে SMTP সার্ভার ব্যবহার করে ইমেইল পাঠানো এবং HTML কনটেন্ট তৈরি করা সহজ এবং নিরাপদ।

Content added By
Promotion